home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_11_08 / weber / gui.h < prev    next >
Text File  |  1993-03-11  |  17KB  |  357 lines

  1. /***************************************************************
  2.  * file: GUI.H
  3.  * purpose: simple gui prototypes, defines and data structures
  4.  * copyright: 1991 by David Weber.  All rights reserved.
  5.  *  This software can be used for any purpose as object, library or executable.
  6.  *  It cannot be sold for profit as source code.
  7.  * history:
  8.  *  12-17-91 - initial code
  9.  *  01-31-93 - this code is now obsolete, see the CPP gui package
  10.  **************************************************************/
  11.  
  12. #ifndef _GUI
  13. #define _GUI
  14.  
  15. #ifdef DEBUG
  16. #define FG_SYNCHRONIZED         /* allow zdb to check heap buffers */
  17. #endif
  18. #include <fg.h>
  19.  
  20. #include "keys.h"
  21.  
  22. /* --------- SYSTEM DEFAULTS --------- */
  23.  
  24. /* standard colors */
  25. #define COLOR_SYSTEM_BACKGROUND FG_BLACK
  26. #define COLOR_MESSAGE_BACKGROUND FG_RED
  27. #define COLOR_MESSAGE_FOREGROUND FG_WHITE
  28. #define COLOR_MENU_FOREGROUND FG_WHITE
  29. #define COLOR_MENU_BACKGROUND FG_BLUE
  30. #define COLOR_MENU_GRAY FG_GRAY
  31. #define COLOR_MENU_HIGHLIGHT FG_LIGHT_CYAN
  32. #define COLOR_MENU_FOCUS FG_LIGHT_GREEN
  33. #define COLOR_DIALOG_FOREGROUND FG_LIGHT_WHITE
  34. #define COLOR_DIALOG_BACKGROUND FG_CYAN
  35. #define COLOR_DIALOG_HIGHLIGHT FG_LIGHT_CYAN
  36. #define COLOR_DIALOG_SELECTION FG_LIGHT_GREEN
  37. #define COLOR_DIALOG_GRAY FG_GRAY
  38. #define COLOR_DIALOG_FOCUS FG_YELLOW
  39.  
  40.  
  41.  
  42. /* --------- GUI.C, MESSAGES AND OBJECTS --------- */
  43.  
  44. /* message box info */
  45. #define MESSAGE_MAX_STR 80      /* maximum size of a message string */
  46. #define MESSAGE_YN " Y/N?"      /* Y/N appendage */
  47. #define MESSAGE_YES 'y'         /* Yes, lower case */
  48. #define MESSAGE_NO 'n'          /* No, lower case */
  49.  
  50. /* message id defines */
  51.  
  52. /* system messages */
  53. #define M_MIN_SYSTEM 0          /* minimum system message */
  54. #define M_NONE 0                /* null message */
  55. #define M_START 1               /* startup message */
  56. #define M_QUIT 2                /* quit message */
  57. #define M_MAX_SYSTEM 99         /* maximum system message */
  58.  
  59. /* input messages */
  60. #define M_MIN_INPUT 100         /* minimum input message */
  61. #define M_KEY 100               /* keyboard hit, key value in short_data.x */
  62. #define M_MOUSE_LEFT 101        /* mouse left button went down, x,y coordinates in short_data */
  63. #define M_MOUSE_CENTER 102      /* mouse center button went down, x,y coordinates in short_data */
  64. #define M_MOUSE_RIGHT 103       /* mouse right button went down, x,y coordinates in short_data */
  65. #define M_MAX_INPUT 199         /* maximum input message */
  66.  
  67. /* error messages, address of function causing error is found in message->data.ptr_data */
  68. #define M_MIN_ERROR 200         /* minimum error message */
  69. #define M_NULL_ERROR 200        /* an undefined error occurred */
  70. #define M_NOMEM 201             /* memory allocation failed */
  71. #define M_MESSAGE_OVERFLOW 202  /* message queue overflowed and messages were lost */
  72. #define M_INVALID_PARMS 203     /* invalid parameters passed to a function */
  73. #define M_NOT_OPEN 204          /* attempt to access an unopened object */
  74. #define M_MAX_ERROR 255         /* maximum error message */
  75.  
  76. /* all messages 256 and greater are user defined for dialog controls etc. */
  77.  
  78. /* message structure */
  79. struct two_shorts { short x,y;  };
  80. union data_list
  81.     {
  82.     long long_data;
  83.     void *ptr_data;
  84.     struct two_shorts short_data;
  85.     };
  86. typedef struct
  87.     {
  88.     short id;               /* message id from list above or user defined */
  89.     union data_list data;   /* message data can be a long, pointer or two shorts */
  90.     } MESSAGE;
  91.  
  92. /* graphical objects */
  93. #define OBJECT_NULL 0           /* object types */
  94. #define OBJECT_MENU 1
  95. #define OBJECT_POPUP 2
  96. #define OBJECT_MESSAGEBOX 3
  97. #define OBJECT_DIALOG 4
  98. typedef struct object_list
  99.     {
  100.     short id;                   /* object type from defines above */
  101.     void (*message_handler)(MESSAGE *,void *);  /* object message handler */
  102.     void *data;                 /* pointer to object data */
  103.     fg_box_t screen;            /* object screen extent */
  104.     fg_handle_t save_area;      /* handle of area saved under object */
  105.     struct object_list *next;   /* next object in list or NULL */
  106.     } GOB;
  107. typedef void (*GENERIC_MESSAGE_HANDLER)(MESSAGE *message,void *);
  108.  
  109.  
  110. /* global data */
  111. extern short gui_errno;         /* last error message */
  112. #ifndef GUI_SOURCE
  113. extern const short gui_screen_width,gui_screen_height;  /* gui screen dimensions */
  114. extern const short gui_char_width,gui_char_height;      /* gui text cell dimensions */
  115. #endif
  116.  
  117. /* prototypes */
  118. short gui_open(void);           /* must be called before using gui */
  119. void gui_close(void);           /* called after finished with gui */
  120. short object_add(short id,void (*message_handler)(MESSAGE *message,void *data),void *data,fg_pbox_t screen);    /* add object to active list */
  121. short object_remove(void *data);        /* removes object from active list */
  122. GOB *object_exists(void *data);         /* returns pointer to object or NULL if none */
  123. short message_get(MESSAGE *message);    /* gets next message from input devices or system */
  124. void message_send(MESSAGE *message);    /* send a message down the list */
  125. short message_send_object(MESSAGE *message,void *data); /* send a message to a particular object */
  126. short message_box(char *str);   /* puts a message box on the screen */
  127. short error_box(short id);      /* displays a box for errors */
  128. short yn_box(char *str);        /* displays a message box and waits for y/n response */
  129. short exclusive_focus_set(void *data);  /* sets focus to a particular object */
  130. short exclusive_focus_clear(void *data);/* clears focus restriction */
  131. void input_handler_set_default(void (*message_handler)(MESSAGE *message));  /* message handler to be invoked when no other objects want message */
  132. void screen_clear(void);        /* clears screen to system background color */
  133.  
  134.  
  135.  
  136. /* --------- MENU.C, MENUS AND POPUPS --------- */
  137.  
  138. /* sizes */
  139. #define MENU_MAX_ITEMS 64
  140. #define POPUP_MAX_ITEMS 64
  141.  
  142. /* popup submenus */
  143. typedef struct popup_item
  144.     {
  145.     short id;               /* associated message id */
  146.     char *name;             /* name of item, note: use of '&' will highlight next character */
  147.     short accelerator;      /* accelerator key or 0 if none */
  148.     unsigned short status;  /* see status defines below */
  149.     /* end of initialized data */
  150.     fg_box_t screen;        /* hotspot on screen, filled in when menu is opened */
  151.     struct popup_item *next;/* pointer to next item in list or NULL if end, filled in when menu is opened */
  152.     } POPUP_ITEM;
  153.  
  154.  
  155. /* menu status */
  156. #define MENU_ACTIVE 1
  157. #define MENU_GRAY 2
  158. #define MENU_HIDDEN 4
  159. #define MENU_STATUS_MASK (MENU_ACTIVE | MENU_GRAY | MENU_HIDDEN)
  160. #define MENU_SELECTED 8
  161. #define MENU_BITS 0x000f
  162.  
  163. /* menu bars are linked lists of this struct */
  164. typedef struct menu_item
  165.     {
  166.     short id;               /* associated message id */
  167.     char *name;             /* name of item, note: use of '&' will highlight next character */
  168.     short accelerator;      /* accelerator key or 0 if none */
  169.     POPUP_ITEM *popup;      /* pop up associated with menu item, or NULL if none */
  170.     short number_of_popup_items;    /* number of items in associated popup or 0 if none */
  171.     unsigned short status;  /* see status defines above */
  172.     /* end of initialized data */
  173.     fg_box_t screen;        /* hotspot on screen, filled in when menu is opened */
  174.     struct menu_item *next; /* pointer to next item in list or NULL if end, filled in when menu is opened */
  175.     } MENU_ITEM;
  176.  
  177. /* menu prototypes */
  178. short menu_open(MENU_ITEM menubar[],short number_of_items);     /* draws a menubar */
  179. void menu_message_handler(MESSAGE *message,MENU_ITEM *menu);    /* handles messages for menus */
  180. short menu_close(MENU_ITEM menubar[]);                          /* erases a menubar */
  181. short menu_modify(MENU_ITEM menubar[],short menu_id,unsigned short status); /* modifies the status of a menu item, ACTIVE, GRAY or HIDDEN */
  182. short menu_clear(MENU_ITEM menubar[]);                          /* clear any open popups */
  183. short popup_open(POPUP_ITEM popup[],short number_of_items,short x,short y);